<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>数学函数和操作符</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="functions-comparison.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="functions.html">快退</a></td><td width="60%" align="center" valign="bottom">章9. 函数和操作符</td><td width="10%" align="right" valign="top"><a href="functions.html">快进</a></td><td width="10%" align="right" valign="top"><a href="functions-string.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="FUNCTIONS-MATH">9.3. 数学函数和操作符</a></h1>
<p>PostgreSQL 为许多类型提供了数学操作符。对于那些在所有可能的组合中都没有一般的数学传统的类型(比如日期/时间类型)，我们在随后的章节里描述实际的行为。</p>
<p><a href="functions-math.html#FUNCTIONS-MATH-OP-TABLE">表9-2</a>显示了可用的数学操作符。</p>
<div class="TABLE"><a name="FUNCTIONS-MATH-OP-TABLE"></a>
<p><b>表9-2. 数学操作符</b></p>
<table border="1" class="CALSTABLE"><col><col><col><col>
<thead>
<tr><th>操作符</th><th>描述</th><th>例子</th><th>结果</th></tr>
</thead>
<tbody>
<tr><td><tt class="LITERAL">+</tt></td><td>加</td><td><tt class="LITERAL">2 + 3</tt></td><td><tt class="LITERAL">5</tt></td></tr>
<tr><td><tt class="LITERAL">-</tt></td><td>减</td><td><tt class="LITERAL">2 - 3</tt></td><td><tt class="LITERAL">-1</tt></td></tr>
<tr><td><tt class="LITERAL">*</tt></td><td>乘</td><td><tt class="LITERAL">2 * 3</tt></td><td><tt class="LITERAL">6</tt></td></tr>
<tr><td><tt class="LITERAL">/</tt></td><td>除(整数除法将截断结果)</td><td><tt class="LITERAL">4 / 2</tt></td><td><tt class="LITERAL">2</tt></td></tr>
<tr><td><tt class="LITERAL">%</tt></td><td>模(求余)</td><td><tt class="LITERAL">5 % 4</tt></td><td><tt class="LITERAL">1</tt></td></tr>
<tr><td><tt class="LITERAL">^</tt></td><td>幂(指数运算)</td><td><tt class="LITERAL">2.0 ^ 3.0</tt></td><td><tt class="LITERAL">8</tt></td></tr>
<tr><td><tt class="LITERAL">|/</tt></td><td>平方根</td><td><tt class="LITERAL">|/ 25.0</tt></td><td><tt class="LITERAL">5</tt></td></tr>
<tr><td><tt class="LITERAL">||/</tt></td><td>立方根</td><td><tt class="LITERAL">||/ 27.0</tt></td><td><tt class="LITERAL">3</tt></td></tr>
<tr><td><tt class="LITERAL">!</tt></td><td>阶乘</td><td><tt class="LITERAL">5 !</tt></td><td><tt class="LITERAL">120</tt></td></tr>
<tr><td><tt class="LITERAL">!!</tt></td><td>阶乘(前缀操作符)</td><td><tt class="LITERAL">!! 5</tt></td><td><tt class="LITERAL">120</tt></td></tr>
<tr><td><tt class="LITERAL">@</tt></td><td>绝对值</td><td><tt class="LITERAL">@ -5.0</tt></td><td><tt class="LITERAL">5</tt></td></tr>
<tr><td><tt class="LITERAL">&amp;</tt></td> <td>二进制 AND</td><td><tt class="LITERAL">91 &amp; 15</tt></td><td><tt class="LITERAL">11</tt></td></tr>
<tr><td><tt class="LITERAL">|</tt></td> <td>二进制 OR</td><td><tt class="LITERAL">32 | 3</tt></td><td><tt class="LITERAL">35</tt></td></tr>
<tr><td><tt class="LITERAL">#</tt></td> <td>二进制 XOR</td><td><tt class="LITERAL">17 # 5</tt></td><td><tt class="LITERAL">20</tt></td></tr>
<tr><td><tt class="LITERAL">~</tt></td> <td>二进制 NOT</td><td><tt class="LITERAL">~1</tt></td><td><tt class="LITERAL">-2</tt></td></tr>
<tr><td><tt class="LITERAL">&lt;&lt;</tt></td><td>二进制左移</td><td><tt class="LITERAL">1 &lt;&lt; 4</tt></td><td><tt class="LITERAL">16</tt></td></tr>
<tr><td><tt class="LITERAL">&gt;&gt;</tt></td><td>二进制右移</td><td><tt class="LITERAL">8 &gt;&gt; 2</tt></td><td><tt class="LITERAL">2</tt></td></tr>
</tbody>
</table>
</div>
<p>位操作符只能用于整数类型，而其它的操作符可以用于全部数值类型。位操作符还可以用于位串类型 <tt class="TYPE">bit</tt> 和 <tt class="TYPE">bit varying</tt> ，如<a href="functions-bitstring.html#FUNCTIONS-BIT-STRING-OP-TABLE">表9-10</a>所示。</p>
<p><a href="functions-math.html#FUNCTIONS-MATH-FUNC-TABLE">表9-3</a>显示了可用的数学函数。在该表中，<tt class="LITERAL">dp</tt> 表示 <tt class="TYPE">double precision</tt> 。这些函数中有许多都有多种不同的形式，区别是参数不同。除非特别指明，任何特定形式的函数都返回和它的参数相同的数据类型。处理 <tt class="TYPE">double precision</tt> 数据的函数大多数是在宿主系统的C库的基础上实现的；因此，精度和数值范围方面的行为是根据宿主系统而变化的。</p>
<a name="AEN6763"></a><a name="AEN6765"></a><a name="AEN6767"></a><a name="AEN6769"></a><a name="AEN6771"></a><a name="AEN6773"></a><a name="AEN6775"></a><a name="AEN6777"></a><a name="AEN6779"></a><a name="AEN6781"></a><a name="AEN6783"></a><a name="AEN6785"></a><a name="AEN6787"></a><a name="AEN6789"></a><a name="AEN6791"></a><a name="AEN6793"></a><a name="AEN6795"></a><a name="AEN6797"></a><a name="AEN6799"></a>
<div class="TABLE"><a name="FUNCTIONS-MATH-FUNC-TABLE"></a>
<p><b>表9-3. 数学函数</b></p>
<table border="1" class="CALSTABLE"><col width="21%"><col width="14%"><col width="32%"><col><col>
<thead>
<tr><th>函数</th><th>返回类型</th><th>描述</th><th>例子</th><th>结果</th></tr>
</thead>
<tbody>
<tr><td><tt class="LITERAL"><code class="FUNCTION">abs</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>(与 <tt class="REPLACEABLE"><i>x</i></tt> 相同)</td><td>绝对值</td><td><tt class="LITERAL">abs(-17.4)</tt></td><td><tt class="LITERAL">17.4</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">cbrt</code>(<tt class="TYPE">dp</tt>)</tt></td><td><tt class="TYPE">dp</tt></td><td>立方根</td><td><tt class="LITERAL">cbrt(27.0)</tt></td><td><tt class="LITERAL">3</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">ceil</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>不小于参数的最小的整数</td><td><tt class="LITERAL">ceil(-42.8)</tt></td><td><tt class="LITERAL">-42</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">ceiling</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>不小于参数的最小整数(<code class="FUNCTION">ceil</code> 的别名)</td><td><tt class="LITERAL">ceiling(-95.3)</tt></td><td><tt class="LITERAL">-95</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">degrees</code>(<tt class="TYPE">dp</tt>)</tt></td><td><tt class="TYPE">dp</tt></td><td>把弧度转为角度</td><td><tt class="LITERAL">degrees(0.5)</tt></td><td><tt class="LITERAL">28.6478897565412</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">exp</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>自然指数</td><td><tt class="LITERAL">exp(1.0)</tt></td><td><tt class="LITERAL">2.71828182845905</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">floor</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>不大于参数的最大整数</td><td><tt class="LITERAL">floor(-42.8)</tt></td><td><tt class="LITERAL">-43</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">ln</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>自然对数</td><td><tt class="LITERAL">ln(2.0)</tt></td><td><tt class="LITERAL">0.693147180559945</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">log</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>以 10 为底的对数</td><td><tt class="LITERAL">log(100.0)</tt></td><td><tt class="LITERAL">2</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">log</code>(<tt class="PARAMETER">b</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">x</tt> <tt class="TYPE">numeric</tt>)</tt></td><td><tt class="TYPE">numeric</tt></td><td>以 <tt class="PARAMETER">b</tt> 为底数的对数</td><td><tt class="LITERAL">log(2.0, 64.0)</tt></td><td><tt class="LITERAL">6.0000000000</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">mod</code>(<tt class="PARAMETER">y</tt>, <tt class="PARAMETER">x</tt>)</tt></td><td>(与参数类型相同)</td><td><tt class="PARAMETER">y</tt>/<tt class="PARAMETER">x</tt> 的余数(模)</td><td><tt class="LITERAL">mod(9,4)</tt></td><td><tt class="LITERAL">1</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">pi</code>()</tt></td><td><tt class="TYPE">dp</tt></td><td>"&pi;"常量</td><td><tt class="LITERAL">pi()</tt></td><td><tt class="LITERAL">3.14159265358979</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">power</code>(<tt class="PARAMETER">a</tt> <tt class="TYPE">dp</tt>, <tt class="PARAMETER">b</tt> <tt class="TYPE">dp</tt>)</tt></td><td><tt class="TYPE">dp</tt></td><td><tt class="PARAMETER">a</tt> 的 <tt class="PARAMETER">b</tt> 次幂</td><td><tt class="LITERAL">power(9.0, 3.0)</tt></td><td><tt class="LITERAL">729</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">power</code>(<tt class="PARAMETER">a</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">b</tt> <tt class="TYPE">numeric</tt>)</tt></td><td><tt class="TYPE">numeric</tt></td><td><tt class="PARAMETER">a</tt> 的 <tt class="PARAMETER">b</tt> 次幂</td><td><tt class="LITERAL">power(9.0, 3.0)</tt></td><td><tt class="LITERAL">729</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">radians</code>(<tt class="TYPE">dp</tt>)</tt></td><td><tt class="TYPE">dp</tt></td><td>把角度转为弧度</td><td><tt class="LITERAL">radians(45.0)</tt></td><td><tt class="LITERAL">0.785398163397448</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">random</code>()</tt></td><td><tt class="TYPE">dp</tt></td><td>0.0 到 1.0 之间的随机数</td><td><tt class="LITERAL">random()</tt></td><td>&nbsp;</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">round</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>圆整为最接近的整数</td><td><tt class="LITERAL">round(42.4)</tt></td><td><tt class="LITERAL">42</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">round</code>(<tt class="PARAMETER">v</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">s</tt> <tt class="TYPE">int</tt>)</tt></td><td><tt class="TYPE">numeric</tt></td><td>圆整为 <tt class="PARAMETER">s</tt> 位小数</td><td><tt class="LITERAL">round(42.4382, 2)</tt></td><td><tt class="LITERAL">42.44</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">setseed</code>(<tt class="TYPE">dp</tt>)</tt></td><td><tt class="TYPE">int</tt></td><td>为随后的 <tt class="LITERAL">random()</tt> 调用设置种子( 0 到 1.0 之间)</td><td><tt class="LITERAL">setseed(0.54823)</tt></td><td><tt class="LITERAL">1177314959</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">sign</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>参数的符号(-1, 0, +1)</td><td><tt class="LITERAL">sign(-8.4)</tt></td><td><tt class="LITERAL">-1</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">sqrt</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>平方根</td><td><tt class="LITERAL">sqrt(2.0)</tt></td><td><tt class="LITERAL">1.4142135623731</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">trunc</code>(<tt class="TYPE">dp</tt> 或 <tt class="TYPE">numeric</tt>)</tt></td><td>(与输入相同)</td><td>截断(向零靠近)</td><td><tt class="LITERAL">trunc(42.8)</tt></td><td><tt class="LITERAL">42</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">trunc</code>(<tt class="PARAMETER">v</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">s</tt> <tt class="TYPE">int</tt>)</tt></td><td><tt class="TYPE">numeric</tt></td><td>截断为 <tt class="PARAMETER">s</tt> 位小数</td><td><tt class="LITERAL">trunc(42.4382, 2)</tt></td><td><tt class="LITERAL">42.43</tt></td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">width_bucket</code>(<tt class="PARAMETER">op</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">b1</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">b2</tt> <tt class="TYPE">numeric</tt>, <tt class="PARAMETER">count</tt> <tt class="TYPE">int</tt>)</tt></td><td><tt class="TYPE">int</tt></td><td>返回一个桶，这个桶是在一个有 <tt class="PARAMETER">count</tt> 个桶，上界为 <tt class="PARAMETER">b1</tt> 下界为 <tt class="PARAMETER">b2</tt> 的等深柱图中 <tt class="PARAMETER">operand</tt> 将被赋予的那个桶。</td><td><tt class="LITERAL">width_bucket(5.35, 0.024, 10.06, 5)</tt></td><td><tt class="LITERAL">3</tt></td></tr>
</tbody>
</table>
</div>
<p>最后，<a href="functions-math.html#FUNCTIONS-MATH-TRIG-TABLE">表9-4</a>显示了可用的三角函数。所有三角函数都使用类型为<tt class="TYPE">double precision</tt> 的参数和返回类型。</p>
<a name="AEN7138"></a><a name="AEN7140"></a><a name="AEN7142"></a><a name="AEN7144"></a><a name="AEN7146"></a><a name="AEN7148"></a><a name="AEN7150"></a><a name="AEN7152"></a>
<div class="TABLE"><a name="FUNCTIONS-MATH-TRIG-TABLE"></a>
<p><b>表9-4. 三角函数</b></p>
<table border="1" class="CALSTABLE"><col><col>
<thead>
<tr><th>函数</th><th>描述</th></tr>
</thead>
<tbody>
<tr><td><tt class="LITERAL"><code class="FUNCTION">acos</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>反余弦</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">asin</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>反正弦</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">atan</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>反正切</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">atan2</code>(<tt class="REPLACEABLE"><i>x</i></tt>, <tt class="REPLACEABLE"><i>y</i></tt>)</tt></td><td><tt class="LITERAL"><tt class="REPLACEABLE"><i>x</i></tt>/<tt class="REPLACEABLE"><i>y</i></tt></tt> 的反正切</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">cos</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>余弦</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">cot</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>余切</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">sin</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>正弦</td></tr>
<tr><td><tt class="LITERAL"><code class="FUNCTION">tan</code>(<tt class="REPLACEABLE"><i>x</i></tt>)</tt></td><td>正切</td></tr>
</tbody>
</table>
</div>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="functions-comparison.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="functions-string.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">比较操作符</td><td width="34%" align="center" valign="top"><a href="functions.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">字符串函数和操作符</td></tr>
</table>
</div>
</body></html>